/*
  Programa GEFE - Gestión de eventos lúdicos.
  Copyright (C) 2010  Antonio Ramírez Marti

  This program is free software: you can redistribute it and/or modify
  it under the terms of the GNU General Public License as published by
  the Free Software Foundation, either version 3 of the License, or
  (at your option) any later version.

  This program is distributed in the hope that it will be useful,
  but WITHOUT ANY WARRANTY; without even the implied warranty of
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  GNU General Public License for more details.

  You should have received a copy of the GNU General Public License
  along with this program.  If not, see <http://www.gnu.org/licenses/>.
*/

#ifndef REPORTEBEBIDAS_H
#define REPORTEBEBIDAS_H

#include <QObject>
#include <QTextDocument>
#include <QTextBlock>
#include <QTextCursor>

#include <dialogreport.h>

class ReporteBebidas : public QObject
{
Q_OBJECT
Q_PROPERTY (QTextDocument * reporte READ getReporte)
Q_ENUMS (Modo)
Q_ENUMS (Formato)

public:
    explicit ReporteBebidas(QObject *parent = 0);

    /*!
      Devuelve el último reporte generado
      */

    QTextDocument *getReporte() const;

    /*!
      Modos de actuacion
      */

    enum Modo
    { Dialogo,SinDialogo };

    /*!
      Formatos de salida
      */

    enum Formato
    { PDF, ODT };

signals:

public slots:

    /*!
      Limpia el documento
      */

    void clean();

    /*!
      Genera un reporte por productos
      */

    void reportePorProductos();

    /*!
      Genera un reporte por ventas
      */

    void reportePorVentas();

    /*!
      Genera un reporte de pales
      */

    void reportePalesAbiertos();

private:

    QTextDocument *reporte;     ///< Reporte generado
    QTextCursor *cursor;        ///< Cursor de escritura

    QTextCharFormat textoNormal;        ///< Formato de texto normal
    QTextCharFormat textoCabecera;           ///< Formato de texto de cabecera

    /*!
      Prepara la clase para trabajar
      */

    void setup();

    /*!
      Presenta un dialogo con el reporte
      */

    void presentaDialog();

    /*!
      Escribe en el documento los datos generales del evento
      */

    void writeDatosGenerales();

    /*!
      Escribe en el documento una lista de productos
      */

    void writeListaProductos();

    /*!
      Escribe una lista de productos detallada
      */

    void writeListaProductosDetallada();

    /*!
      Escribe una lista de ventas por dias
      */

    void writeListaVentasPorDias();

    /*!
      Escribe una lista de pales abiertos
      */

    void writeListaPalesAbiertos();

    /*!
      Prepara el documento
      */

    void preparaDocumento();



};

#endif // REPORTEBEBIDAS_H
